package com.atguigu.gulimall.product;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.*;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;

/**
 * 整合mybatis-plus
 *
 *  1、导入依赖
 *      本项目的mybatis-plus依赖以及导入common模块了
 *  2、配置
 *      1、配置数据源
 *          1、导入mysql驱动包
 *              注意要配置mysql的版本
 *          2、在application.yml配置数据源相关信息：用户名、密码、url、jdbc
 *      2、配置mybatis-plus
 *          1、使用@MapperScan，标明dao的位置
 *          2、告诉mybatis-plus，sql映射文件的位置
 *      3、配置逻辑删除
 *          1、配置全局的逻辑删除规则  （可省略）
 *          2、配置逻辑删除的组件Bean  （3.3.1版本后可省略）
 *          3、在要进行逻辑删除的字段加上@TableLogic注解
 *      4、使用逆向工程后controller有几个基本方法：1、查询列表、2、新增、3、根据id查询数据、4、修改、5、删除
 *      5、使用JSR303来校验数据合法性
 *          1、在实体字段标注校验注解
 *          2、在Controller的方法上标注注解开启校验
 *      6、模板引擎配置步骤：
 *          1、导入依赖
 *          2、关闭缓存
 *          3、在templates目录下编写模板
 *      7、修改模板页面时动态刷新页面
 *          1、引入devtools依赖
 *          2、关闭模板引擎缓存
 *          3、快捷键 ctrl+shift+f9  或ctrl+f9（不建议，因为为编译整个项目，包括所有微服务，很缓慢） 注意：对于代码的修改，还是重启项目
 *      8、redis配置步骤
 *          1、引入启动依赖
 *          2、配置host主机地址和端口
 *          3、测试 SpringBoot自动配置为我们注入了RedisTemplate和StringRedisTemplate，为了方便，我们可以使用StringRedisTemplate
 *      9、整合Redisson
 *          1、导入依赖
 *          2、创建一个Redisson配置,注入RedissonClient
 *      10、整合SpringCache
 *          1、加入依赖
 *          2、手动配置缓存类型是redis
 *              分析：SpringBoot为我们自动配置了Redis的配置和注入了Redis的缓存管理组件
 *          3、开启能够缓存功能
 *          4、使用缓存注解
 *              1、@Cacheable   触发将数据保存到缓存的操作
 *              2、@CacheEvict  触发将数据从缓存删除的操作
 *              3、@CachePut  不影响方法执行更新缓存
 *              4、@Caching  组合以上操作
 *              5、@CacheConfig  在类级别共享缓存的相同配置
 *
 */
@EnableRedisHttpSession
@EnableFeignClients(basePackages = "com.atguigu.gulimall.product.feign")  //可以指定页可以不指定，不指定的话该启动类就需要放在根包路径下
@EnableDiscoveryClient
@SpringBootApplication
public class GulimallProductApplication {

	public static void main(String[] args) {
		SpringApplication.run(GulimallProductApplication.class, args);
	}

}
